// - 1. 3 + 2 +"7"的结果是什么？3 + (2 + "7")的结果又是什么？这两个表达式输出的值是什么类型？数值相加与字符串拼接）
// 3 + 2 +"7"结果为：57。 字符串
// 3 + (2 + "7")结果为：327。 字符串

// - 2. 6 - false的结果是什么？（减法运算符）
// 6 - 0 = 6

// - 3. 6 - "false"和6 + "false"的结果分别是什么？结果输出值是什么数据类型？（减法运算符和加法运算符的不同）
// 6 - "false" = NaN。 数字
// 6 + "false" = 6false。 字符串

// - 4.请分析console.log(1 + - + + + - + 1)的结果？（一元运算符的运行顺序）
// 1 + - + + + - + 1 = 1+(-(+(-(+(-(+1)))))) = 1 + (-1) + 1 + 1 + (-1) + 1= 2

// - 5.下面代码分别输出什么？前自增(自减)与后自增(自减)的区别？（自增自减）
// let a = 1;
// let b = ++a + ++a;

// console.log(a); 输出3
// console.log(b); 输出5

// ++a是先++再运算
// a++是先运算再++

// - 6.分析下面代码，请问 j 和 y 分别是多少？(不要运行代码，自己分析后写出答案)（自增自减）
// var i = 100;
// i++;          i = 101
// j = i++;      j = 101
// y = ++j;      先运算++j，j=j+1=102，在运算y = j，所以y = j = 102

// console.log(j) 输出102
// console.log(y) 输出102
//分析：如上所示

// - 7.JS中哪些值通过Boolean对象转换出来的值为`false`?
// false、0、NaN、""、null、undefined

// - 8.分析下面代码的结果并解释原因。（短路运算）
// let a = 1;
// let b = 2;

// console.log(a && b);   输出1  有真即真 要判断到第一个变量为真就短路并返回该值
// console.log(a || b);   输出2  一假即假 要判断到最后一个变量并返回该值

// - 9.以下代码输出的结果分别是什么？（短路运算）
// let a = true && "" && 12306;
// let b = false || "" || undefined || "bluej" || 12306;
// console.log(a);   ""
// console.log(b);   "bluej"

// - 10.分析下面代码，分别输出什么？(以注释形式写在console.log后面)（== 和 ===）

// let str = "12306";
// let str1 = 1;
// let num = 12306;
// let boo = true;

// console.log(str == num);     true
// console.log(str === num);    false
// console.log(str1 == boo);    true
// console.log(str1 === boo);   false

// - 11.等于(==)与严格等于(===)的区别？
// == 只判断值  ===数据类型和值一起判断

// - 12.下面代码输出的分别是什么？除了typeof还有什么方法可以判断数据类型？（数据类型判断）

// let str = "bluej";
// let num = 12306;
// let boo = false;
// let arr = [];
// let obj = {};

// console.log(typeof str);          string
// console.log(typeof num);          number
// console.log(typeof boo);          boolean
// console.log(typeof arr);          array
// console.log(typeof obj);          object
// console.log(typeof undefined);    undefined
// console.log(typeof null);         null

// instanceof、object.prototype.toString.call()可以判断数据类型

// -------------以下题目为提高题,非必做-------------
// - 写出执行结果,并解释原因（typeof）
// var x=1;
// if(function f(){}){
//     x += typeof f;
// }
// console.log(x)

// f = function f(){} = undefined; x = x + typeof f = 1 + undefined = 1undefined(字符串拼接)

// - 写出执行结果,并解释原因（typeof）
// var foo = {
//         bar: function(){
//             return this.baz;
//         },
//          baz:1
//     }
// console.log(typeof (f=foo.bar)());

// 执行foo.bar()=1,但是只在foo这个函数的作用域里，当f = foo.bar时，只是把bar的函数传进去了
// 相当于只是f: function(){
//                 return this.baz;
//          }并没有把foo里面的 baz：1 给传进去，所以当执行 f() 时，f函数里没有baz，所以返回undefined。

// - 写出执行结果,并解释原因
// const value  = 'Value is' + !!Number(['0']) ? 'yideng' : 'undefined';
// console.log(value);

//  'yideng'
//Number(['0']) = 0; !!Number(['0']) = false; 再拼接 'Value isfalse'，然后字符串布尔值为真，所以在三元运算符为真，返回'yideng'
